﻿//AcademicPlanner - course registration planning web app.
//Copyright (C) 2009  Boubacar Diallo

//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.

//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.

//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AcademicPlanner.Data.Entities
{
	/// <summary>
	/// AcademicScheduleEntity represents the data aspect of a domain layer's <c>AcademicSchedule</c>.
	/// </summary>
	/// <since>1.0</since>
	public class AcademicScheduleEntity : Entity
	{
		/// <summary>
		/// Gets or sets the name of this AcademicScheduleEntity.
		/// </summary>
		/// <since>1.0</since>
		public virtual string Name { get; set; }

		/// <summary>
		/// Gets or sets the <c>AcademicPeriodEntity</c> this AcademicScheduleEntity begins in.
		/// </summary>
		/// <since>1.0</since>
		public virtual AcademicPeriodEntity StartPeriodEntity { get; set; }

		/// <summary>
		/// Gets or sets the <c>ProgramEntity</c> this AcademicScheduleEntity is for.
		/// </summary>
		/// <since>1.0</since>
		public virtual ProgramEntity ProgramEntity { get; set; }

		/// <summary>
		/// Gets or sets the list of <c>RegistrationEntity</c>s in this AcademicScheduleEntity.
		/// </summary>
		/// <since>1.0</since>
		public virtual IList<RegistrationEntity> RegistrationEntities { get; set; }


		/// <summary>
		/// Sets default values for this AcademicScheduleEntity's properites.
		/// </summary>
		/// <remarks>
		/// <list type="bullet">
		///		<item><c>Name</c> is set to <c>""</c>.</item>
		///		<item><c>RegistrationEntities</c> is set to an empty list.</item>
		///		<item>
		///			<c>PeriodEntity</c> is set to a new <c>AcademicPeriodEntity</c>
		///			with default properties through <see cref="M:AcademicPeriodEntity.SetDefaults"/>.
		///		</item>
		/// </list>
		/// </remarks>
		/// <since>1.0</since>
		public override void SetDefaults()
		{
			base.SetDefaults();
			Name = "";
			StartPeriodEntity = new AcademicPeriodEntity();
			StartPeriodEntity.SetDefaults();
			RegistrationEntities = new List<RegistrationEntity>();
		}

		/// <summary>
		/// Adds a <c>RegistrationEntity</c> to this AcademicScheduleEntity's 
		/// <c>RegistrationEntities</c>.
		/// </summary>
		/// <param name="pEntity">The <c>RegistrationEntity</c> to add.</param>
		/// <since>1.0</since>
		public virtual void AddRegistrationEntity(RegistrationEntity pEntity)
		{
			pEntity.ScheduleEntity = this;
			RegistrationEntities.Add(pEntity);
		}
	}
}
